package com.maltys.dp;

/**
 * 斐波那契数，通常⽤ F(n) 表示，形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始，
 * 后⾯的每⼀项数字都是前 * ⾯两项数字的和。也就是：
 * F(0) = 0，F(1) = 1
 * F(n) = F(n - 1) + F(n - 2)，其中 n > 1
 * 给你n ，请计算 F(n) 。
 *
 * @author malty
 * @link <a href="https://leetcode.cn/problems/fibonacci-number/description/">斐波那契数</a>
 */
public class Fibonacci {
    public static void main(String[] args) {
        Fibonacci fibonacci = new Fibonacci();
        int fib = fibonacci.fib(5);
        System.out.println(fib);
    }

    public int fib(int n) {
        int[] dp = new int[]{0, 1};
        if (n < 2) {
            return dp[n];
        }
        for (int i = 2; i <= n; i++) {
            int tmp = dp[1];
            dp[1] = dp[0] + dp[1];
            dp[0] = tmp;
        }
        return dp[1];
    }
}
